New debugging function. As GetKeyNameText() returns a localized key name
authorTor Lillqvist <tml@novell.com>
Tue, 15 Mar 2005 02:07:08 +0000 (02:07 +0000)
committerTor Lillqvist <tml@src.gnome.org>
Tue, 15 Mar 2005 02:07:08 +0000 (02:07 +0000)
2005-03-15  Tor Lillqvist  <tml@novell.com>

* gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New
debugging function. As GetKeyNameText() returns a localized key
name we need to convert it to UTF-8.

* gdk/win32/gdkprivate-win32.h: Declare it.

* gdk/win32/gdkevents-win32.c: Use it.

* gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix
handling of children of foreign windows. They should be child
windows from Windows's perspective, even if they are toplevel GDK
windows.

ChangeLog
ChangeLog.pre-2-10
ChangeLog.pre-2-8
gdk/win32/gdkevents-win32.c
gdk/win32/gdkmain-win32.c
gdk/win32/gdkprivate-win32.h
gdk/win32/gdkwindow-win32.c

index 8211db0effae46a347ffbabdff699fc32286745a..f3b973b1522701945f932a4de0fd5618dc85d742 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2005-03-15  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New
+       debugging function. As GetKeyNameText() returns a localized key
+       name we need to convert it to UTF-8.
+
+       * gdk/win32/gdkprivate-win32.h: Declare it.
+
+       * gdk/win32/gdkevents-win32.c: Use it.
+
+       * gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix
+       handling of children of foreign windows. They should be child
+       windows from Windows's perspective, even if they are toplevel GDK
+       windows.
+
 2005-03-13  Ivan, Wong Yat Cheung  <email@ivanwong.info>
 
        * gdk/win32/gdkgeometry-win32.c (gdk_window_scroll): A further fix
index 8211db0effae46a347ffbabdff699fc32286745a..f3b973b1522701945f932a4de0fd5618dc85d742 100644 (file)
@@ -1,3 +1,18 @@
+2005-03-15  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New
+       debugging function. As GetKeyNameText() returns a localized key
+       name we need to convert it to UTF-8.
+
+       * gdk/win32/gdkprivate-win32.h: Declare it.
+
+       * gdk/win32/gdkevents-win32.c: Use it.
+
+       * gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix
+       handling of children of foreign windows. They should be child
+       windows from Windows's perspective, even if they are toplevel GDK
+       windows.
+
 2005-03-13  Ivan, Wong Yat Cheung  <email@ivanwong.info>
 
        * gdk/win32/gdkgeometry-win32.c (gdk_window_scroll): A further fix
index 8211db0effae46a347ffbabdff699fc32286745a..f3b973b1522701945f932a4de0fd5618dc85d742 100644 (file)
@@ -1,3 +1,18 @@
+2005-03-15  Tor Lillqvist  <tml@novell.com>
+
+       * gdk/win32/gdkmain-win32.c (_gdk_win32_key_to_string): New
+       debugging function. As GetKeyNameText() returns a localized key
+       name we need to convert it to UTF-8.
+
+       * gdk/win32/gdkprivate-win32.h: Declare it.
+
+       * gdk/win32/gdkevents-win32.c: Use it.
+
+       * gdk/win32/gdkwindow-win32.c (gdk_window_new_internal): Fix
+       handling of children of foreign windows. They should be child
+       windows from Windows's perspective, even if they are toplevel GDK
+       windows.
+
 2005-03-13  Ivan, Wong Yat Cheung  <email@ivanwong.info>
 
        * gdk/win32/gdkgeometry-win32.c (gdk_window_scroll): A further fix
index eb3ea71c71c2ebe0a5d1860baa9c8b3175484760..97af1e6f69dc18aa66411b86b833741adf785761 100644 (file)
@@ -2210,7 +2210,7 @@ gdk_event_translate (GdkDisplay *display,
           * removed it. Repost the same message to our queue so that
           * we will get it later when we are prepared.
           */
-         GDK_NOTE (MISC, g_print (" (posted)"));
+         GDK_NOTE (EVENTS, g_print (" (posted)"));
        
          PostMessage (msg->hwnd, msg->message,
                       msg->wParam, msg->lParam);
@@ -2375,9 +2375,7 @@ gdk_event_translate (GdkDisplay *display,
     case WM_SYSKEYDOWN:
       GDK_NOTE (EVENTS,
                g_print (" %s ch:%.02x %s",
-                        (GetKeyNameText (msg->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
+                        _gdk_win32_key_to_string (msg->lParam),
                         msg->wParam,
                         decode_key_lparam (msg->lParam)));
 
@@ -2403,9 +2401,7 @@ gdk_event_translate (GdkDisplay *display,
     case WM_KEYDOWN:
       GDK_NOTE (EVENTS, 
                g_print (" %s ch:%.02x %s",
-                        (GetKeyNameText (msg->lParam, buf,
-                                         sizeof (buf)) > 0 ?
-                         buf : ""),
+                        _gdk_win32_key_to_string (msg->lParam),
                         msg->wParam,
                         decode_key_lparam (msg->lParam)));
 
index 161549416664f35b74bc3929604004d4620a08f8..0308e94895a54032b6199b100c72819e73528b0a 100644 (file)
@@ -904,6 +904,26 @@ _gdk_win32_message_to_string (UINT msg)
   return NULL;
 }
 
+gchar *
+_gdk_win32_key_to_string (LONG lParam)
+{
+  char buf[100];
+  gchar *keyname_utf8;
+
+  if (GetKeyNameText (lParam, buf, sizeof (buf)) &&
+      (keyname_utf8 = g_locale_to_utf8 (buf, -1, NULL, NULL, NULL)) != NULL)
+    {
+      gchar *retval = static_printf ("%s", keyname_utf8);
+
+      g_free (keyname_utf8);
+
+      return retval;
+    }
+
+  return static_printf ("unk-%#lx", lParam);
+}
+      
+
 gchar *
 _gdk_win32_rect_to_string (const RECT *rect)
 {
index 221e3429aecffa15a4006e0e3034bbeabbbcb3e6..44cd29226f1c6708f7cc7b16da1b61eecef58fb6 100644 (file)
@@ -403,6 +403,7 @@ gchar *_gdk_win32_psstyle_to_string    (DWORD        pen_style);
 gchar *_gdk_win32_psendcap_to_string   (DWORD        pen_style);
 gchar *_gdk_win32_psjoin_to_string     (DWORD        pen_style);
 gchar *_gdk_win32_message_to_string    (UINT         msg);
+gchar *_gdk_win32_key_to_string        (LONG         lParam);
 gchar *_gdk_win32_rect_to_string       (const RECT  *rect);
 
 gchar *_gdk_win32_gdkrectangle_to_string (const GdkRectangle *rect);
index b68f93519a8bf56034f28e880cdddfc5324a9283..262aeb606fa7ebc4ece9d91201f28361e69d15ec 100644 (file)
@@ -341,7 +341,7 @@ _gdk_windowing_window_init (void)
  
   _gdk_window_init_position (GDK_WINDOW (private));
 
-  gdk_win32_handle_table_insert (&_gdk_root_window, _gdk_parent_root);
+  gdk_win32_handle_table_insert ((HANDLE *) &_gdk_root_window, _gdk_parent_root);
 
   GDK_NOTE (MISC, g_print ("_gdk_parent_root=%p\n", GDK_WINDOW_HWND (_gdk_parent_root)));
 }
@@ -488,6 +488,7 @@ gdk_window_new_internal (GdkWindow     *parent,
   DWORD dwStyle = 0, dwExStyle;
   RECT rect;
   GdkWindow *window;
+  GdkWindow *orig_parent;
   GdkWindowObject *private;
   GdkWindowImplWin32 *impl;
   GdkDrawableImplWin32 *draw_impl;
@@ -510,6 +511,8 @@ gdk_window_new_internal (GdkWindow     *parent,
 
   g_return_val_if_fail (GDK_IS_WINDOW (parent), NULL);
   
+  orig_parent = parent;
+
   GDK_NOTE (MISC,
            g_print ("gdk_window_new: %s\n",
                     (attributes->window_type == GDK_WINDOW_TOPLEVEL ? "TOPLEVEL" :
@@ -605,30 +608,38 @@ gdk_window_new_internal (GdkWindow     *parent,
   switch (private->window_type)
     {
     case GDK_WINDOW_TOPLEVEL:
-      dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
-      hparent = _gdk_root_window;
-      offset_x = _gdk_offset_x;
-      offset_y = _gdk_offset_y;
+    case GDK_WINDOW_DIALOG:
+      if (GDK_WINDOW_TYPE (parent) != GDK_WINDOW_ROOT)
+       {
+         g_warning (G_STRLOC ": Toplevel windows must be created as children\n"
+                    "of a window of type GDK_WINDOW_ROOT or GDK_WINDOW_FOREIGN");
+         hparent = _gdk_root_window;
+       }
+      /* Children of foreign windows aren't toplevel windows */
+      if (GDK_WINDOW_TYPE (orig_parent) == GDK_WINDOW_FOREIGN)
+       {
+         dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN;
+       }
+      else
+       {
+         if (private->window_type == GDK_WINDOW_TOPLEVEL)
+           dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN;
+         else
+           dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
+
+         offset_x = _gdk_offset_x;
+         offset_y = _gdk_offset_y;
+       }
       break;
 
     case GDK_WINDOW_CHILD:
       dwStyle = WS_CHILDWINDOW | WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
       break;
 
-    case GDK_WINDOW_DIALOG:
-      dwStyle = WS_OVERLAPPED | WS_MINIMIZEBOX | WS_SYSMENU | WS_CAPTION | WS_THICKFRAME | WS_CLIPCHILDREN;
-#if 0
-      dwExStyle |= WS_EX_TOPMOST; /* //HB: want this? */
-#endif
-      hparent = _gdk_root_window;
-      offset_x = _gdk_offset_x;
-      offset_y = _gdk_offset_y;
-      break;
-
     case GDK_WINDOW_TEMP:
-      dwStyle = WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
-      /* a temp window is not necessarily a top level window */
-      dwStyle |= (_gdk_parent_root == parent ? WS_POPUP : WS_CHILDWINDOW);
+      /* A temp window is not necessarily a top level window */
+      dwStyle = (_gdk_parent_root == parent ? WS_POPUP : WS_CHILDWINDOW);
+      dwStyle |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS;
       dwExStyle |= WS_EX_TOOLWINDOW;
       offset_x = _gdk_offset_x;
       offset_y = _gdk_offset_y;
@@ -666,7 +677,7 @@ gdk_window_new_internal (GdkWindow     *parent,
   else
     title = get_default_title ();
   if (!title || !*title)
-    title = "GDK client window";
+    title = "";
 
   private->event_mask = GDK_STRUCTURE_MASK | attributes->event_mask;
       
@@ -2833,8 +2844,6 @@ gboolean
 gdk_window_set_static_gravities (GdkWindow *window,
                                 gboolean   use_static)
 {
-  GdkWindowObject *private = (GdkWindowObject *)window;
-  
   g_return_val_if_fail (window != NULL, FALSE);
   g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);